import ColumnConfig from "@/components/VTable/classes/ColumnConfig";

/** 动态表格管理类 目前实现了动态表格的初始化，生成等步骤 但是不包括全局储存数据
 * 全局储存数据的流程通过继承的方式实现拓展
 */
export default class DynamicTableManager {
  constructor(tableCols = []) {
    /** 被选择的列表值 @public */
    this.selectedList = [];

    /** 表格列配置数组 应当来自外部的props数组 @private */
    this.tableCols = tableCols;

    /** 满参数数组 仅负责实现拓展满参数 @private */
    this.fullPropsList = [];

    /** 可勾选的有意义数组 即全部可以被勾选的，用于渲染勾选表单控件的 数组 @public */
    this.torenderCanSelectList = [];
  }

  /** 当前项的prop配置是操作栏么？ @private */
  isOperationProp(colConfig) {
    return colConfig.prop === "operation";
  }

  /** 由外部执行一次的初始化函数
   * @public
   * @override
   */
  init() {
    // 初始化满参数的数组
    this.fullPropsList = this.tableCols.map(
      colConfig => new ColumnConfig(colConfig)
    );

    // 过滤出已选择的 重构成key值的已选择数组
    this.selectedList = this.fullPropsList
      .filter(
        // 默认已选择的数组不包含操作栏 操作栏不属于已选择的内容
        colConfig =>
          colConfig.hidden === false &&
          this.isOperationProp(colConfig) === false
      )
      .map(colConfig => colConfig.key);

    // 把操作栏过滤出来 初始化选择项表单的数组
    this.torenderCanSelectList = this.fullPropsList.filter(
      colConfig => this.isOperationProp(colConfig) === false
    );
  }

  /** 获得选择项的数组 对外提供数组
   * 但是不考虑外部是否会修改本数组 这是有风险的
   * @public
   */
  getSelectedList() {
    return this.selectedList;
  }
}
